package com.weaving.monitor.mapper;

import com.weaving.monitor.entity.WarpingBeamProduct;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 整经盘头产品数据访问层接口
 * 
 * 功能说明：
 * 1. 定义与warping_beam_product表交互的数据库操作方法
 * 2. 提供根据机器ID和梳栉号查询花型信息的功能
 * 
 * 注解说明：
 * - @Mapper: MyBatis注解，标识这是一个Mapper接口
 * 
 * 方法说明：
 * - selectSubBeamCodeByMachineAndGbNum: 根据机器ID和梳栉号查询子盘头编码
 * 
 * @author 系统开发团队
 * @version 1.0
 * @since 2024-01-01
 */
@Mapper
public interface WarpingBeamProductMapper {
    
    /**
     * 根据机器ID和梳栉号查询子盘头编码
     * 
     * 功能说明：
     * 1. 通过机器ID和梳栉号查询对应的花型信息
     * 2. 实现复杂的关联查询逻辑
     * 
     * 查询逻辑：
     * 1. 首先通过机器ID和梳栉号查询factory_machine_beamgroup表获取beamgroup_Id
     * 2. 然后通过beamgroup_Id查询warping_beam_product表获取sub_beam_code
     * 3. 按start_time升序排列，取第一条记录
     * 
     * 参数说明：
     * - machineId: 机器ID，如"J001"
     * - gbNum: 梳栉号，如1、2、3、4
     * 
     * 返回值说明：
     * - String: 子盘头编码，对应梳栉花型
     * - null: 如果未找到对应的记录
     * 
     * SQL说明：
     * - 子查询：从factory_machine_beamgroup表获取beamgroup_Id
     * - 主查询：从warping_beam_product表获取sub_beam_code
     * - 排序：按start_time升序
     * - 限制：取第一条记录
     * 
     * @param machineId 机器ID，如"J001"
     * @param gbNum 梳栉号，如1、2、3、4
     * @return 子盘头编码，查询失败时返回null
     */
    String selectSubBeamCodeByMachineAndGbNum(@Param("machineId") String machineId, @Param("gbNum") Integer gbNum);
    
    /**
     * 根据机上盘头号查询待分配的盘头列表
     * 
     * 功能说明：
     * 1. 通过机上盘头号参数来匹配待分配盘头列表
     * 2. 查询条件：sub_beam_code like #{machineBobbinNumber} and status='2'
     * 3. 按create_time升序排列
     * 
     * 查询逻辑：
     * 1. 在warping_beam_product表中查询sub_beam_code字段
     * 2. 使用LIKE操作符匹配机上盘头号
     * 3. 状态为'2'表示待分配状态
     * 4. 按create_time升序排列
     * 
     * 参数说明：
     * - machineBobbinNumber: 机上盘头号，用于匹配查询
     * 
     * 返回值说明：
     * - List<String>: 待分配的盘头号列表，按创建时间升序排列
     * 
     * SQL说明：
     * SELECT sub_beam_code FROM warping_beam_product 
     * WHERE sub_beam_code LIKE #{machineBobbinNumber} AND status='2' 
     * ORDER BY create_time ASC
     * 
     * @param machineBobbinNumber 机上盘头号
     * @return 待分配的盘头号列表
     */
    List<String> selectPendingBobbinNumbersByMachineBobbinNumber(@Param("machineBobbinNumber") String machineBobbinNumber);
} 